看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
设计实现双端队列。
你的实现需要支持以下操作:
MyCircularDeque(k)
:构造函数,双端队列的大小为k
。insertFront()
:将一个元素添加到双端队列头部。 如果操作成功返回true
。insertLast()
:将一个元素添加到双端队列尾部。如果操作成功返回true
。deleteFront()
:从双端队列头部删除一个元素。 如果操作成功返回true
。deleteLast()
:从双端队列尾部删除一个元素。如果操作成功返回true
。getFront()
:从双端队列头部获得一个元素。如果双端队列为空,返回-1
。getRear()
:获得双端队列的最后一个元素。 如果双端队列为空,返回-1
。isEmpty()
:检查双端队列是否为空。isFull()
:检查双端队列是否满了。
示例:
plain
1 | MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3 |
解题思路
- 我们定义一个数组,如果数组的长度与要求的队列长度长度相同则
isFull
- 如果数组的长度为
0
,则满足isEmpty
insertLast
其实就是往数组中第一项插入元素insertLast
其实就是往数组中push
元素deleteFront
其实就是移除数组的第一项元素deleteLast
其实就是移除数组的最后一项元素getRear
获取最后一项也就是获取数组的第length-1
项getFront
获取数组第0
项
提示:
- 所有值的范围为
[1, 1000]
- 操作次数的范围为
[1, 1000]
- 请不要使用内置的双端队列库。
解题代码
js
1 | /** |
如有任何问题或建议,欢迎留言讨论!